home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / [BreakoutD187349472005.psc / DSound.bas < prev    next >
BASIC Source File  |  2005-04-06  |  6KB  |  210 lines

  1. Attribute VB_Name = "DSound"
  2. Option Explicit
  3.  
  4. 'Almost all of this code (for direct sound) is furnised from www.directx4vb.com
  5.  
  6. Public Ds As DirectSound
  7.  
  8. 'My cheap sounds!! Some are loaded as an array to make them
  9. 'polyphonic.
  10.  
  11. Public DsGoal(5) As DirectSoundBuffer
  12. Public dsGameOver As DirectSoundBuffer
  13. Public dsBonus(7) As DirectSoundBuffer
  14. Public dsBip(5) As DirectSoundBuffer
  15. Public dsMiss As DirectSoundBuffer
  16. Public dsPaddle As DirectSoundBuffer
  17. Private dsMeter As DirectSoundBuffer
  18. Private Bzzz As DirectSoundBuffer
  19. Private ExtraBall As DirectSoundBuffer
  20. Private Vocoder As DirectSoundBuffer
  21. Private BeatLoop As DirectSoundBuffer
  22. Private Filter As DirectSoundBuffer
  23.  
  24. Public DsDesc As DSBUFFERDESC
  25. Public DsWave As WAVEFORMATEX
  26.  
  27. Public CurrFreq As Long
  28.  
  29. Public Sub InitSound()
  30.  
  31.    Randomize
  32.    Set Ds = dx.DirectSoundCreate("")
  33.    
  34.    'It is best to check for errors before continuing
  35.    If Err.Number <> 0 Then
  36.        MsgBox "Unable to Continue, Error creating Directsound object."
  37.        Exit Sub
  38.    End If
  39.    
  40.    Ds.SetCooperativeLevel frmDX.hwnd, DSSCL_NORMAL
  41.    
  42.    'These settings are quite important; what you set here reflects
  43.    'in the quality that the sound plays.
  44.    '8bit + 1 channel = Poor quality, but less processing time and less memory
  45.    '16bit + 2 channels = Good quality, more memory and more processing time
  46.    'The comments about processing time and memory will only affect you
  47.    'when you start putting a heavy load on the sound card; and/or it is
  48.    'playing/storing lots of sound files.
  49.    DsDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
  50.    DsWave.nFormatTag = WAVE_FORMAT_PCM 'Sound Must be PCM otherwise we get errors
  51.    DsWave.nChannels = 1    '1= Mono, 2 = Stereo
  52.    DsWave.lSamplesPerSec = 22050
  53.    DsWave.nBitsPerSample = 16 '16 =16bit, 8=8bit
  54.    DsWave.nBlockAlign = DsWave.nBitsPerSample / 8 * DsWave.nChannels
  55.    DsWave.lAvgBytesPerSec = DsWave.lSamplesPerSec * DsWave.nBlockAlign
  56.    
  57.    'This line creates a sound buffer based on the information you have just
  58.    'put in the two structures
  59.    
  60.    
  61.    'Here are my cheap sounds being loaded into a buffer!
  62.    Dim i As Long, j As Long
  63.    
  64.    
  65.    'A polyphonic sound will not cut itself off when a new instance of the sound is
  66.    'played. In other words, if the sound was half a second long and it tried
  67.    'to play twice before 1 second elapsed it would cut itself off. Unless it is
  68.    'polyphonic.
  69.    'So, to avoid this cutoff from happening, I cheated a bit and put some of
  70.    'my individual sounds into an array. These were sounds that I knew (once the game
  71.    'started going faster) would cut themselves off due to frequent instances.
  72.    'So now the first subscript of the array will sound, and then the next until it
  73.    'reaches the end of the array, where it will start over.
  74.    
  75.    'To understand the difference, try changing one of the arrays to have only one
  76.    'index and then check out the sounds (particularly the 'Bip' sound) You'll notice
  77.    'what's going on and what I've been jammering about here.
  78.      
  79.    For i = 0 To 5
  80.       Set DsGoal(i) = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Block" & i + 1 & ".Wav", DsDesc, DsWave)
  81.    Next i
  82.     
  83.    For i = LBound(dsBip()) To UBound(dsBip())
  84.       Set dsBip(i) = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Bip.Wav", DsDesc, DsWave)
  85.    Next i
  86.    
  87.    'these are monophonic
  88.    Set dsGameOver = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\GameOver1.Wav", DsDesc, DsWave)
  89.    Set dsMiss = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Miss.Wav", DsDesc, DsWave)
  90.    Set dsPaddle = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Paddle.Wav", DsDesc, DsWave)
  91.    Set dsMeter = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Meter.wav", DsDesc, DsWave)
  92.    Set Bzzz = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Bzzz.wav", DsDesc, DsWave)
  93.    Set ExtraBall = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\Extra.wav", DsDesc, DsWave)
  94.    Set Vocoder = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\vocoder.wav", DsDesc, DsWave)
  95.    Set BeatLoop = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\beatloop.wav", DsDesc, DsWave)
  96.    Set Filter = Ds.CreateSoundBufferFromFile(App.Path & "\SFX\filter.wav", DsDesc, DsWave)
  97.    
  98.  
  99. End Sub
  100.  
  101. Public Sub PlayGoalSound()
  102.  
  103.    Static i As Long
  104.    
  105.    DsGoal(i).Play DSBPLAY_DEFAULT
  106.    
  107.    i = i + 1
  108.    
  109.    If i > 5 Then
  110.       i = 0
  111.    End If
  112.  
  113. End Sub
  114.  
  115. Public Sub PlayBonusSound()
  116.  
  117. Static i As Integer
  118.  
  119. dsBonus(i).Play DSBPLAY_DEFAULT
  120. i = i + 1
  121. If i > UBound(dsBonus()) Then
  122.    i = 0
  123. End If
  124.  
  125. End Sub
  126.  
  127. Public Sub PlayGameOverSound()
  128.  
  129. dsGameOver.Play DSBPLAY_DEFAULT
  130.  
  131. End Sub
  132.  
  133. Public Sub PLayBipSound()
  134.  
  135. Static i As Integer
  136.  
  137. dsBip(i).Play DSBPLAY_DEFAULT
  138. i = i + 1
  139. If i > UBound(dsBip()) Then
  140.    i = 0
  141. End If
  142.  
  143. End Sub
  144.  
  145. Public Sub PlayMissSound()
  146.  
  147. dsMiss.Play DSBPLAY_DEFAULT
  148.  
  149. End Sub
  150.  
  151. Public Sub PlayPaddleSound()
  152.  
  153. dsPaddle.Play DSBPLAY_DEFAULT
  154.  
  155. End Sub
  156.  
  157. Public Sub PlayMeterSound()
  158.  
  159.    dsMeter.Play DSBPLAY_DEFAULT
  160.    
  161. End Sub
  162.  
  163. Public Sub PlayBzzz()
  164.  
  165.    Bzzz.Play DSBPLAY_DEFAULT
  166.    
  167. End Sub
  168.  
  169. Public Sub PlayExtraBall()
  170.  
  171.    ExtraBall.Play DSBPLAY_DEFAULT
  172.    
  173. End Sub
  174.  
  175. Public Sub PlayVocoder()
  176.  
  177.    Vocoder.Play DSBPLAY_DEFAULT
  178.    
  179. End Sub
  180.  
  181. Public Sub PlayBeatz()
  182.  
  183.    BeatLoop.Play DSBPLAY_LOOPING
  184.    
  185. End Sub
  186.  
  187. Public Sub StopBeatz()
  188.  
  189.    BeatLoop.Stop
  190.    BeatLoop.SetCurrentPosition 0
  191.    
  192. End Sub
  193.  
  194. Public Sub PlayFilter()
  195.  
  196.    Filter.Play DSBPLAY_DEFAULT
  197.    
  198. End Sub
  199.  
  200. Sub StopSound()
  201. 'Stopping it effectively pauses it
  202. 'DsBuffer.Stop
  203. 'Only when you set the current position to 0 will
  204. 'it go back to the beginning
  205. 'DsBuffer.SetCurrentPosition 0
  206. 'You can use the SetCurrentPosition to jump around
  207. 'a sound file as you like; which can be useful
  208. End Sub
  209.  
  210.